home *** CD-ROM | disk | FTP | other *** search
/ Danny Amor's Online Library / Danny Amor's Online Library - Volume 1.iso / html / rfc / rfcxxxx / rfc1622 < prev    next >
Text File  |  1995-07-26  |  35KB  |  899 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                         P. Francis
  8. Request for Comments: 1622                                           NTT
  9. Category: Informational                                         May 1994
  10.  
  11.  
  12.                          Pip Header Processing
  13.  
  14. Status of this Memo
  15.  
  16.    This memo provides information for the Internet community.  This memo
  17.    does not specify an Internet standard of any kind.  Distribution of
  18.    this memo is unlimited.
  19.  
  20. Preamble
  21.  
  22.    During 1992 and 1993, the Pip internet protocol, developed at
  23.    Bellcore, was one of the candidate replacments for IP.  In mid 1993,
  24.    Pip was merged with another candidate, the Simple Internet Protocol
  25.    (SIP), creating SIPP (SIP Plus).  While the major aspects of Pip--
  26.    particularly its distinction of identifier from address, and its use
  27.    of the source route mechanism to achieve rich routing capabilities--
  28.    were preserved, many of the ideas in Pip were not.  The purpose of
  29.    this RFC and the companion RFC "Pip Near-term Architecture" are to
  30.    record the ideas (good and bad) of Pip.
  31.  
  32.    The remainder of this document is taken verbatem from the Pip draft
  33.    memo of the same title that existed when the Pip project ended.  As
  34.    such, any text that indicates that Pip is an intended replacement for
  35.    IP should be ignored.
  36.  
  37. Abstract
  38.  
  39.    Pip is an internet protocol intended as the replacement for IP
  40.    version 4.  Pip is a general purpose internet protocol, designed to
  41.    handle all forseeable internet protocol requirements.  This
  42.    specification defines the Pip header processing for Routers and
  43.    Hosts.
  44.  
  45. Acknowledgements
  46.  
  47.    I want to individually acknowledge Rob Coltun, Steve Deering, Ramesh
  48.    Govindan, Joel Halpern, John Ioannidis, Chris Petrilli, Bob Smart,
  49.    and Zheng Wang.  I want also to acknowledge the many people from the
  50.    Pip working group who have participated in developing Pip.  Finally,
  51.    I want to acknowledge the SIP protocol (or, more accurately, the
  52.    people behind the SIP protocol) for providing certain good ideas.
  53.  
  54.  
  55.  
  56.  
  57.  
  58. Francis                                                         [Page 1]
  59.  
  60. RFC 1622                 Pip Header Processing                  May 1994
  61.  
  62.  
  63. Conventions
  64.  
  65.    All functions in this specification are mandatory.
  66.  
  67. 1.  Introduction
  68.  
  69.    Pip is an internet protocol intended as the replacement for IP
  70.    version 4.  Pip is a general purpose internet protocol, designed to
  71.    handle all forseeable internet protocol requirements.  This
  72.    specification defines the Pip header processing for Routers and
  73.    Hosts.
  74.  
  75.    The design of Pip is fundamentally different from that of previous
  76.    internetwork protocols.  Pip is designed to be as general as
  77.    possible, but without significantly compromising performance.
  78.    Because of Pip's generality, it can handle forseeable routing and
  79.    addressing requirements.  It is hoped that it will be able to handle
  80.    most if not all future routing and addressing requirements.
  81.  
  82.    There are many detailed aspects of Pip that provide this generality
  83.    that are not discussed here.  It is useful, however, to mention one
  84.    general aspect.  That is, Pip strives to remove as much "functional
  85.    semantics" from the base specification as possible.  Pip defines a
  86.    packet header and forwarding rules that can include many different
  87.    functional semantics (that is, routing, addressing, and flow
  88.    paradigms).  Therefore, the reader may often find him or herself
  89.    asking "But how do you do foo with Pip?" The answer to this sort of
  90.    question belongs in companion documents to the basic Pip spec.
  91.  
  92.    Pip can be thought of as a mechanism for triggering actions in hosts
  93.    and routers, just as a machine language can be thought of as a
  94.    mechanism for triggering actions in CPUs.  The machine language has
  95.    no functional semantics outside of the specific actions it triggers
  96.    (move this register, write that memory location, etc.).  But, the
  97.    machine language is a very powerful tool upon which functional
  98.    semantics are built.  Likewise, Pip is a powerful tool upon which
  99.    routing, addressing, and flow functions can be built.
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114. Francis                                                         [Page 2]
  115.  
  116. RFC 1622                 Pip Header Processing                  May 1994
  117.  
  118.  
  119. 2.  Pip Specification
  120.  
  121.    The Pip header is partitioned into three parts, the Initial Part, the
  122.    Transit Part, and the Options Part.
  123.  
  124.  
  125.            +===========================+
  126.            |       Initial Part        |
  127.            +===========================+
  128.            |       Transit Part        |
  129.            +===========================+
  130.            |       Options Part        |
  131.            +===========================+
  132.            |                           |
  133.            |         Payload           |
  134.            |                           |
  135.  
  136.  
  137.    Each part falls on a 32-bit boundary (as indicated by the double
  138.    lines shown), and the Transit Part falls on a 64 bit boundary.
  139.  
  140.    The concept of tunneling in an integral part of Pip.  Pip achieves
  141.    tunneling by encapsulating the Transit Part of the Pip header in
  142.    another Transit Part.  Therefore, when tunneling, there is one
  143.    Transit Part for each (nested) tunnel:
  144.  
  145.  
  146.            +===========================+
  147.            |       Initial Part        |
  148.            +===========================+
  149.            |       Transit Part        |
  150.            +===========================+
  151.            |       Transit Part        |
  152.            +===========================+
  153.                        .
  154.                        .
  155.                        .
  156.            +===========================+
  157.            |       Transit Part        |
  158.            +===========================+
  159.            |       Options Part        |
  160.            +===========================+
  161.  
  162.  
  163.    Because each Transit Part has only what is necessary for router
  164.    forwarding and handling, this method of tunneling is reasonably
  165.    efficient in terms of packet size.
  166.  
  167.  
  168.  
  169.  
  170. Francis                                                         [Page 3]
  171.  
  172. RFC 1622                 Pip Header Processing                  May 1994
  173.  
  174.  
  175. 2.1  Initial Part
  176.  
  177.    The Initial Part is formatted as shown in Figure 1.
  178.  
  179.                                          length, in bits
  180.            +===========================+
  181.            |    Version Number = 8     |     4
  182.            +---------------------------+
  183.            |       Sub-Version         |     4
  184.            +---------------------------+
  185.            |      Options Offset       |     8
  186.            +---------------------------+
  187.            |     Options Contents      |     8
  188.            +---------------------------+
  189.            |     Options Present       |     8
  190.            +===========================+
  191.            |       Packet SubID        |     16
  192.            +---------------------------+
  193.            |         Protocol          |     16
  194.            +===========================+
  195.            |         Dest ID           |     64
  196.            +===========================+
  197.            |        Source ID          |     64
  198.            +===========================+
  199.            |      Payload Length       |     32
  200.            +===========================+
  201.            |       Host Version        |     8
  202.            +---------------------------+
  203.            |      Payload Offset       |     8
  204.            +---------------------------+
  205.            |        Hop Count          |     16
  206.            +===========================+
  207.  
  208.                           Figure 1:  Initial Part
  209.  
  210.    An explanation of each field follows.
  211.  
  212.    2.1.1  Version Numbers
  213.  
  214.    The first octet is divided into two 4-bit fields, the Version and the
  215.    Sub-Version.  The Version field is set to be 8, and is meant to be
  216.    version 8 of IP.  (As of this writing, this is an experimental number
  217.    assigned for development of Pip.) Thus, all encapsulation schemes
  218.    defined for IP can work for Pip as well.
  219.  
  220.    As long as the Version field is 8, the Initial Part and Options Part
  221.    of the Pip Header is as specified in this standard.  (In other words,
  222.    the Sub-Version field refers only to the Transit Part.)
  223.  
  224.  
  225.  
  226. Francis                                                         [Page 4]
  227.  
  228. RFC 1622                 Pip Header Processing                  May 1994
  229.  
  230.  
  231.    By doing this, we allow the Transit Part of the Pip Header to change
  232.    completely without necessarily requiring a host to understand the new
  233.    Transit Part.  If a host receives a Pip header with a Version number
  234.    of 8 and an unknown Sub-version number, the host does not try to
  235.    parse the Transit Part at all, rather it processes only the Initial
  236.    Part and the Options Part.  (By using the Pip Header Protocol to
  237.    format Pip Headers, a host can be made to formulate the right Transit
  238.    Part, even though the host doesn't understand the semantics of the
  239.    Transit Part.  This allows radical migration of the Transit Part
  240.    while potentially not requiring changes to hosts.)
  241.  
  242.    If a host or a router receives a packet with an unknown Version
  243.    number, the packet is silently discarded.
  244.  
  245.    The Sub-Version field is set to the value 0 for the version of Pip
  246.    defined in this specification.  As long as the Sub-Version number is
  247.    0, the Transit Part is as specified in this standard.  Any packet
  248.    received by a router with a Version number of 8 and an unknown Sub-
  249.    Version number is silently discarded.
  250.  
  251.    2.1.2  Options Offset
  252.  
  253.    The Options Offset indicates the position of the Options Part.  The
  254.    unit of measure of the Options Offset is 32-bit words, counting the
  255.    first word of the Pip Header as word 0.
  256.  
  257.    2.1.3  Options Contents
  258.  
  259.    This field indicates how the Options Present field should be
  260.    interpreted.  Each bit of the Options field indicates if each of up
  261.    to eight options is present in the Options Part.  The Options
  262.    Contents field indirectly indicates which option each bit of the
  263.    Options Present field refers to.  We say indirectly because the
  264.    mapping referred to by the Options Contents field is stored locally.
  265.    In other words, without additional information (the mapping), it is
  266.    not possible to examine the Options Contents field and know what
  267.    option each bit of the Options Present field refers to.
  268.  
  269.    Any of 256 possible Options Contents values can be active at a given
  270.    time.  (Note that the means by which the meaning of the Options
  271.    Contents values are assigned and conveyed to routers and hosts is
  272.    outside the scope of this specification.)
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282. Francis                                                         [Page 5]
  283.  
  284. RFC 1622                 Pip Header Processing                  May 1994
  285.  
  286.  
  287.    2.1.4  Options Present
  288.  
  289.    This field indicates which of the Options indicated by the Options
  290.    Contents field are actually present in the Options Part.  Each bit of
  291.    this field refers to a single option type.  The mapping of each bit
  292.    to its' option type is determined by the Options Contents field.
  293.  
  294.    For instance, assume that the Options Contents field indicates that
  295.    bit 0 of the Options Present field refers to the PDN Address option,
  296.    that bit 1 of the Options Present field refers to the foo option, and
  297.    that bit 2 of the Options Present field refers to the Fragmentation
  298.    option.  (As of this writing, there is only one option.  Until there
  299.    are more than eight options, there is no need to define more than one
  300.    Options Contents values.)
  301.  
  302.    In this case, a value of 101 in the Options Present field indicates
  303.    that the PDN Address and Fragmentation options are present in the
  304.    Options Part, and that the foo option is not present.
  305.  
  306.    Note that an Options Present value of 0 indicates that there are no
  307.    options present, regardless of the value of the Options Contents
  308.    field.  Note also that no more than 8 options, not including the
  309.    default first option (the Options Descriptor), can be present in any
  310.    Options Part.
  311.  
  312.    The Options Contents/Options Present method of processing options
  313.    allows for efficient processing of options.  First, a router can
  314.    ignore any options that may be present but that do not impact it (for
  315.    instance, a router not attached to a PDN need not consider the PDN
  316.    Address option).  Second, the desired option can be very quickly
  317.    retrieved, because the first option, the Options Descriptor option,
  318.    contains the offset of each of the up to eight options indicated by
  319.    the Options Present field.
  320.  
  321.    2.1.5  Packet SubID
  322.  
  323.    This field is used by Pip hosts to correctly associate received PCMP
  324.    messages with local control blocks.  This is necessary because the
  325.    semantics of the Transit Part can change while a packet is in
  326.    transit.  Therefore, a router sending a PCMP message cannot
  327.    necessarily provide all of the information needed by the Pip host to
  328.    correctly identify the context of the received message (that is,
  329.    which "packet flow" it is identified with).
  330.  
  331.    A PCMP message uses the Protocol, Source ID, Dest ID, and Packet
  332.    SubID to define the PCMP messages context.  It is not sufficient to
  333.    use just Protocol, Source ID, and Dest ID, because two hosts running
  334.    the same protocol between them may have multiple "flows", for
  335.  
  336.  
  337.  
  338. Francis                                                         [Page 6]
  339.  
  340. RFC 1622                 Pip Header Processing                  May 1994
  341.  
  342.  
  343.    instance, a data flow, a video flow, and an audio flow in the case of
  344.    multi-media.  Each flow may have a different Transit Part, and take
  345.    different paths.  Therefore, the Packet SubID field is needed to
  346.    further differentiate.
  347.  
  348.    2.1.6  Protocol
  349.  
  350.    Indicates the protocol header found in the payload.  The values for
  351.    this field are the same as those used for IPv4.
  352.  
  353.    2.1.7  Dest ID
  354.  
  355.    The Dest ID field indicates the Pip ID of the final recipient of the
  356.    Pip packet.  This field is examined by both hosts and routers.
  357.  
  358.    When a Pip System processes the Routing Directive (RD), it may
  359.    determine that it needs to examine the Dest ID for further
  360.    processing.  This may happen both when a host or router receives a
  361.    Pip packet destined for itself, or when a router receives a packet
  362.    that should be forwarded based on Dest ID (as indicated by the RD).
  363.  
  364.    When a Pip system determines at forwarding time that a packet is
  365.    destined for itself, it checks the Dest ID to verify if that packet
  366.    is destined for it.  If the complete Dest ID matches one of its own
  367.    Pip IDs, then the packet is for it, and is passed to the layer
  368.    indicated by the Protocol field (in the Host Part).  (The Pip system
  369.    may of course wish to check a security option before passing a packet
  370.    to an upper layer.)
  371.  
  372.    If the complete Dest ID field does not match one of its own IDs, then
  373.    an ID/RD Mismatch PCMP message is sent to the source of the packet,
  374.    as indicated by the Source ID and potentially source information in
  375.    the RD.  The purpose of this message is to flush the ID to RD binding
  376.    in the source Pip host.
  377.  
  378.    2.1.8  Source ID
  379.  
  380.    This is the Pip ID of the source of the packet.  It is passed to
  381.    upper layers for the purposes of identifying the context for the
  382.    packet.
  383.  
  384.    2.1.9  Payload Length
  385.  
  386.    The Payload Length gives the length of the Pip packet payload in
  387.    units of 8 bits.  The Payload Length does not include the length of
  388.    the Pip header.
  389.  
  390.  
  391.  
  392.  
  393.  
  394. Francis                                                         [Page 7]
  395.  
  396. RFC 1622                 Pip Header Processing                  May 1994
  397.  
  398.  
  399.    2.1.10  Host Version
  400.  
  401.    The Host Version field indicates what "version" of Pip software the
  402.    sending host has implemented.  This is to allow a host to inform a
  403.    router which ancillary protocols/messages the host is able to accept.
  404.    It is envisioned that over time, new host functions will be
  405.    developed.  Different hosts will install these new functions at
  406.    different times.  This field allows routers to know what functions
  407.    the host can and cannot handle.
  408.  
  409.    2.1.11  Payload Offset
  410.  
  411.    The Payload Offset indicates the position of the Payload Part.  The
  412.    unit of measure of the Payload Offset is 32-bit words, counting the
  413.    first word of the Pip Header as word 0.
  414.  
  415.    If a Pip system encapsulates a Transit Part in another Transit Part,
  416.    then the Payload Offset is increased by the length of the new Transit
  417.    Part.
  418.  
  419.    2.1.12  Hop Count
  420.  
  421.    The Hop Count is decremented by every router that forwards the Pip
  422.    packet.  If a system receives a Pip header with a Hop Count equal to
  423.    0, and is not the recipient of the packet, then the packet is
  424.    discarded and a PCMP Destination Unreachable is routed to the system
  425.    indicated by the Routing Directive.  (In other words, a host can
  426.    legally receive a Transit Part with a Hop Count of 0, and indeed a
  427.    host doesn't look at the Hop Count field upon reception.)
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450. Francis                                                         [Page 8]
  451.  
  452. RFC 1622                 Pip Header Processing                  May 1994
  453.  
  454.  
  455. 2.2  Transit Part
  456.  
  457.    The Transit Part is formatted as shown in Figure 2.
  458.  
  459.  
  460.                                          length, in bits
  461.                    +===========================+
  462.                    |         Reserved          |     16
  463.                    +---------------------------+
  464.                    |    Transit Part Offset    |     8
  465.                    +---------------------------+
  466.                    |        HD Contents        |     8
  467.                    +===========================+
  468.                    |  Handling Directive (HD)  |     32
  469.     ---------------+===========================+
  470.         ^          |        FTIF Offset        |     8
  471.         |          +---------------------------+
  472.         |          |        RC Contents        |     8
  473.         |          +---------------------------+
  474.         |          |   Routing Context (RC)    |     16
  475.      Routing       +===========================+
  476.                    |         FTIF 1            |     16
  477.      Directive     +---------------------------+
  478.         |          |         FTIF 2            |     16
  479.         |          +---------------------------+
  480.         |                       .
  481.         |                       .
  482.         |                       .
  483.         |          +---------------------------+
  484.         |          |         FTIF N            |     16
  485.         |          +---------------------------+
  486.         v          |         Padding           |     Variable
  487.     ---------------+===========================+
  488.  
  489.                           Figure 2: Transit Part
  490.  
  491.    An explanation of each field follows.
  492.  
  493.    2.2.1  Transit Part Offset
  494.  
  495.    This field gives the position of the first word of the next Transit
  496.    Part.  The unit of measure of the Transit Part Offset is 32-bit
  497.    words, counting the first word of the current Transit Part as word 0.
  498.    If there is no next Transit Part, then this field is written as all
  499.    0's.
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506. Francis                                                         [Page 9]
  507.  
  508. RFC 1622                 Pip Header Processing                  May 1994
  509.  
  510.  
  511.    2.2.2  HD Contents
  512.  
  513.    The HD Contents field indicates how the Handling Directive (HD) field
  514.    should be interpreted.  The HD field is divided into multiple fields,
  515.    each representing a different handling function.  Each individual
  516.    field in the HD is called an HD Unit (HDU).  The Options Contents
  517.    field indirectly indicates which HDUs are in the HD field, and where
  518.    they are.  We say indirectly because the mapping referred to by the
  519.    HD Contents field is stored locally. In other words, without
  520.    additional information (the mapping), it is not possible to examine
  521.    the HD Contents field and know what the HDU locations are.
  522.  
  523.    Any of 256 possible HD Contents values can be active at a given time.
  524.    (Note that the means by which the meaning of the HD Contents values
  525.    are assigned and conveyed to routers and hosts is outside the scope
  526.    of this specification.)
  527.  
  528.    2.2.3  Handling Directive (HD)
  529.  
  530.    The HD is a general purpose field used for the purpose of triggering
  531.    special packet handling by a Pip system.  The HD field does not
  532.    influence a Pip router's next hop choice for a Pip packet, nor does
  533.    it influence a Pip host's determination as to whether the Pip packet
  534.    is destined for it.  Examples of special packet handling would be
  535.    "low priority queueing", or "high priority discard", etc.  (Note that
  536.    the Transit Options also influence "handling", in the sense that
  537.    handling is essentially defined here to mean "anything that is not
  538.    routing.  The HD field, though, is intended for the most common types
  539.    of handling--handling that is expected to be in a significant
  540.    percentage of packets.)
  541.  
  542.    Both hosts and routers use the HD field.  (Hosts may make use of the
  543.    HD field for packet handling for both incoming and outgoing packets.)
  544.  
  545.    There is a complete distinction between the syntax and the semantics
  546.    of the HD field.  (This can be contrasted with, for instance, IP,
  547.    which couples the semantics and syntax of the TOS bits.  That is, the
  548.    IP specification itself determines, to a first degree, how the TOS
  549.    bits are interpreted.) Each Pip system can modify the semantic
  550.    meaning of the HD, for instance, by increasing or decreasing the
  551.    queueing priority of a packet.  This is called packet tagging.
  552.  
  553.    From an abstract modeling perspective, the HD is handled as follows:
  554.  
  555.    1.  Extract the semantic meaning(s) (the handling instructions
  556.        associated with the HDUs) from the HD field.  Transmitting Pip
  557.        hosts determine the semantic meaning by some other means, such as
  558.        the upper layer protocol.  If the receiving system decapsulates
  559.  
  560.  
  561.  
  562. Francis                                                        [Page 10]
  563.  
  564. RFC 1622                 Pip Header Processing                  May 1994
  565.  
  566.  
  567.        multiple Pip headers, then the HD semantics are extracted from the
  568.        lowest Pip header for which it is not the target (see example on
  569.        tunneling below).
  570.  
  571.    2.  Handle the Pip packet according to those instructions.  In some
  572.        cases, it is possible that the Pip system does not understand the
  573.        semantics of one or more HDUs of the HD field.  For each HDU whose
  574.        semantics are not understood, however, the pip system at least
  575.        knows whether to 1) pass the HDU on untouched, 2) set it to all
  576.        0s, 3) set it to all 1s, 4) discard the packet silently, or 5)
  577.        discard the packet with a PCMP HDU Not Understood packet.
  578.  
  579.    3.  Modify the semantic meaning if necessary.  Note also that if the
  580.        Pip packet is replicated for multicast, each packet has its HD
  581.        semantics modified individually.  .LP .in 3 2.2.4 Tunneling .LP
  582.        Consider two Pip systems, X and Y, separated by one or
  583.        intermediate Pip systems.  X wishes to tunnel a Transit Part to Y.
  584.        Y is therefore the target system of the tunnel.  A Transit Part He
  585.        arrives at X.  In order to forward the Transit Part to Y, X
  586.        encapsulates He in another Transit Part, Hy.  Y is the target
  587.        system for Transit Part Hy.  X sets the HD of He to what it would
  588.        have been if Y was directly connected to X (that is, there were no
  589.        intermediate Pip systems between X and Y).  Further, it is
  590.        intended that Y will derive its HD semantics from the HD of
  591.        Transit Part He, not Transit Part Hy.  .sp .KS
  592.  
  593.         ----0-----o-----o-----o-----o-----0----
  594.             X     I     J     K     L     Y
  595.  
  596.    Now consider the operation of Pip system L (the previous hop system
  597.    to Y).  When L forwards the packet to Y, it may either decapsulate
  598.    the packet (in the knowledge that Y is the target for Hy), or not
  599.    decapsulate the packet.  Either way, L derives its HD semantics from
  600.    the HD of Transit Part Hy.
  601.  
  602.    If L does not decapsulate the Transit Part, then it is as though I,
  603.    J, K, and L are a "subnetwork" (albeit a Pip subnetwork), and Y is
  604.    stripping the "subnetwork" header (Hy) off before processing the true
  605.    Transit Part (He).  If L does decapsulate the Transit Part, then,
  606.    from Y's perspective, it is essentially as though Y were directly
  607.    connected to X.
  608.  
  609.  
  610.  
  611.  
  612.  
  613.  
  614.  
  615.  
  616.  
  617.  
  618. Francis                                                        [Page 11]
  619.  
  620. RFC 1622                 Pip Header Processing                  May 1994
  621.  
  622.  
  623.    2.2.5  Routing Directive (RD)
  624.  
  625.    The RD consists of the Routing Context (RC), the RC Contents, the
  626.    FTIF Offset, and a series of zero or more FTIFs (Forwarding Table
  627.    Index Fields).  This series of FTIFs is called the FTIF Chain.  The
  628.    sole purpose of the RD is to determine how to forward the Pip
  629.    packet--the RD does not influence handling in any way.
  630.  
  631.  
  632.    Figure 3 illustrates the decision process for forwarding the Pip
  633.    packet.
  634.  
  635.                  +---------+(next level RC)
  636.     (decapsulate)|         |
  637.                  |         v
  638.                  |<--------RC----------------->FIB
  639.                  |        /              |       |    IF Offset)
  640.                  |       |     |
  641.                  |       |     v
  642.                  |<------|---FTIF------------->FIB
  643.                  |       |  /  :
  644.                  |       |<-   :(repeatedly...)
  645.                  |       |     :
  646.                  |       |     v
  647.                  |<------|---FTIF------------->FIB
  648.                          |  /  |
  649.                          |<-   |
  650.                          v     v
  651.                           DestID-------------->FIB
  652.  
  653.                        Figure 3:  Forwarding Process
  654.  
  655.  
  656.    Figure 3 is interpreted as follows.  The FIB is the Forwarding
  657.    Information Block.  The FIB contains all the information needed to
  658.    forward a packet, and may contain multiple next hop (for multicast).
  659.    This information includes 1) the outgoing interface, 2) how to
  660.    encapsulate the packet, including lower-layer address(es) (the
  661.    lower-layer address(es) along with the outgoing interface determine
  662.    the next hop Pip system), 3) whether and how to tunnel, 4) how to
  663.    modify the semantics of the HD and RC, and how to modify the FTIF
  664.    Offset.  The goal of the forwarding algorithm is to reach the
  665.    appropriate FIB.
  666.  
  667.    The directed lines in Figure 3 start at the RC and, through various
  668.    possible paths, reach a FIB.  These lines represent the various
  669.    information that can influence the forwarding decision (that is, the
  670.    FIB chosen).  For instance, there is no way to reach a FIB without
  671.  
  672.  
  673.  
  674. Francis                                                        [Page 12]
  675.  
  676. RFC 1622                 Pip Header Processing                  May 1994
  677.  
  678.  
  679.    first examining the information in the RC.  However, it is possible
  680.    to identify a FIB by considering only the information in the RC (as
  681.    indicated by the directed line leading directly right from the RC).
  682.    Based on the information in the RC, it is also possible to determine
  683.    that the Transit Part must be decapsulated, and 1) the RC of the next
  684.    Transit Part be processed (the line leading directly left), 2) the
  685.    FTIF indicated by the FTIF Offset is processed (the line leading down
  686.    and right), or 3) the Dest ID is processed (the line leading down and
  687.    lest).
  688.  
  689.    Likewise, when considering the value of an FTIF (in addition to all
  690.    information already considered), the resulting action may be that 1)
  691.    a FIB is identified, 2) the Transit Part is decapsulated, 3) the
  692.    subsequent FTIF is processed, or 4) the Dest ID is processed.
  693.  
  694.    The RC is handled similarly to the HD.  The RC Contents field
  695.    indicates how the RC should be interpreted.  While the RC is
  696.    constructed similarly to the HD in the sense that it consists of
  697.    multiple fields, the RC can be interpreted as a flat field in-so-far
  698.    as forwarding a Pip packet is concerned, whereas the HD cannot.
  699.  
  700.    Thus, in a mechanical sense, the RC Contents can be viewed as an
  701.    index into a table that returns a pointer to another table (an
  702.    rcTable), which is indexed by the RC itself.  (Or, the combined RC
  703.    Contents/RC can be viewed as a single large index into a single
  704.    table, etc.)
  705.  
  706.    The FTIF Offset field indicates which FTIF is active.  The active
  707.    FTIF is the one that is used to index the forwarding table indicated
  708.    by the RC Contents/RC.  An FTIF Offset value of 0 means that the
  709.    first FTIF is active, an FTIF Offset value of 1 means that the second
  710.    FTIF is active, and so on.  If there are no FTIFs, then the FTIF
  711.    Offset has no meaning, and can be any value.  In this case, the RC
  712.    field itself will indicate how to forward the packet.
  713.  
  714.    The FTIF Chain is padded out to a 32-bit boundary.  Note that there
  715.    can be more than 16 bits of padding (for instance, if it is desirable
  716.    to pad out to a 64-bit boundary).  The padding is ignored upon
  717.    receipt, and can be transmitted as any value (that is, it does not
  718.    have to be any specific pattern of 0's or 1's).
  719.  
  720.    Note that a single "number" in the FTIF chain may in fact be more
  721.    than 16 bits in length.  In this case, the number can be encoded as
  722.    multiple FTIFs with no loss of generality.  It is only required that
  723.    in all cases a multiple FTIF number be distinguishable from a single
  724.    FTIF number.
  725.  
  726.  
  727.  
  728.  
  729.  
  730. Francis                                                        [Page 13]
  731.  
  732. RFC 1622                 Pip Header Processing                  May 1994
  733.  
  734.  
  735.    2.2.6  Router RD Forwarding Algorithm
  736.  
  737.    This section describes the forwarding algorithm for a Pip router.
  738.  
  739.    1.  Using the value of the RC field as an index, retrieve one of the
  740.        following instructions (steps 2 - 5) from the rcTable determined
  741.        by the RC Contents.
  742.  
  743.    2.  If the instruction is decapsulate, then decapsulate the Transit
  744.        Part and re-execute step 1 using the next Transit Part.
  745.  
  746.    3.  If the instruction is forward, then retrieve the associated
  747.        Forwarding Information Block (FIB), and go to step 12.
  748.  
  749.    4.  If the instruction is to examine the Dest ID, then retrieve the
  750.        FIB associated with the Dest ID, and go to step 12.
  751.  
  752.    5.  If the instruction is to examine the FTIF Chain, then retrieve the
  753.        forwardingTable indicated by the rcTable entry, and continue on to
  754.        step 6.
  755.  
  756.    6.  Using the value of the currently active FTIF (this is the FTIF
  757.        indicated by the FTIF Offset if this is the first FTIF examined)
  758.        as an index, retrieve one or more of the following instructions
  759.        (steps 7 - 10) from the forwardingTable identified in step 5 or
  760.        step 10.
  761.  
  762.    7.  If the instruction is decapsulate, then decapsulate the Pip header
  763.        and re-execute step 1 using the new header (this is the same as
  764.        step 2).
  765.  
  766.    8.  If the instruction is forward, then (possibly additionally)
  767.        retrieve the associated FIB, and go to step 12 (this is the same
  768.        as step 3).
  769.  
  770.    9.  If the instruction is to examine the Dest ID, then retrieve the
  771.        FIB associated with the Dest ID and go to step 12 (this is the
  772.        same as step 4).
  773.  
  774.    10.  If the instruction is to examine the next FTIF, then, according
  775.         to the information in the current forwardingTable entry, modify
  776.         the current FTIF and choose a new forwardingTable.
  777.  
  778.    11.  Make the next FTIF the current FTIF and go to step 6.
  779.  
  780.    12.  The FIB contains a set of potential recipients for the Pip
  781.         packet, including next hop Pip systems (both directly connected
  782.         and at the end of Pip tunnels) and the upper layer of the local
  783.  
  784.  
  785.  
  786. Francis                                                        [Page 14]
  787.  
  788. RFC 1622                 Pip Header Processing                  May 1994
  789.  
  790.  
  791.         system.  Taking into consideration 1) the incoming interface, 2)
  792.         the previous hop Pip system if known (as determined by the
  793.         lower-layer source address and incoming interface), and 3)
  794.         potentially other local information (such as congestion on
  795.         outgoing queues), prune the set of potential recipients.  (This
  796.         may result in no pruning having taken place or in every potential
  797.         next hop having been pruned.)
  798.  
  799.    13.  For each remaining next hop, format a Pip header by modifying a)
  800.         the RC, b) the current FTIF, c) the FTIF Offset (to point to 1)
  801.         the FTIF pointed to in the received RD, 2) the current FTIF, 3)
  802.         the Nth FTIF counting from the 0th FTIF, or 4) the Nth FTIF
  803.         counting forwards or backwards from the current FTIF) and d) any
  804.         Pip header encapsulations, according to the information in the
  805.         FIB, and transmit the packet to the recipient (either a next hop
  806.         or upper layer).
  807.  
  808.    2.3  Options Part
  809.  
  810.    The Option Part is formatted as shown in Figure 4.
  811.  
  812.  
  813.            +===========================+
  814.            |    Options Descriptor     |     64
  815.            +===========================+
  816.            |        Option 2           |     Variable
  817.            +===========================+
  818.            |        Option 3           |     Variable
  819.            +===========================+
  820.                        .
  821.                        .
  822.                        .
  823.            +===========================+
  824.            |        Option N           |     Variable
  825.            +===========================+
  826.  
  827.  
  828.                           Figure 4: Options Part
  829.  
  830.    Every Option is at least one 32-bit word in length, and ends on a
  831.    32-bit word boundary.  Because the type of each option is known from
  832.    the Options Contents field, there is no need to indicate the option
  833.    type in the options field themselves.  Thus, there is no common
  834.    format among the options--each option has its own format.  The
  835.    individual options are defined in another specification.
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842. Francis                                                        [Page 15]
  843.  
  844. RFC 1622                 Pip Header Processing                  May 1994
  845.  
  846.  
  847.    2.3.1  Options Descriptor
  848.  
  849.    The Options Descriptor option gives the offset of each option in the
  850.    Options Part.  The Options Descriptor consists of eight eight-bit
  851.    Option Position fields, each of which gives the position of up to
  852.    eight options (there can be no more than 8 Options Part).  Each of
  853.    the Option Position fields correspond to one of the bits in the
  854.    Options Present field.  The unit of measure of each Option Position
  855.    is 32-bit words, counting the first word of the Options Part as word
  856.    0.  The high order Option Position field corresponds to the high
  857.    order bit in the Options Present field.
  858.  
  859. Security Considerations
  860.  
  861.    Security issues are not discussed in this memo.
  862.  
  863. Author's Address
  864.  
  865.    Paul Francis
  866.    NTT Software Lab
  867.    3-9-11 Midori-cho Musashino-shi
  868.    Tokyo 180 Japan
  869.  
  870.    Phone: +81-422-59-3843
  871.    Fax +81-422-59-3765
  872.    EMail: francis@cactus.ntt.jp
  873.  
  874.  
  875.  
  876.  
  877.  
  878.  
  879.  
  880.  
  881.  
  882.  
  883.  
  884.  
  885.  
  886.  
  887.  
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898. Francis                                                        [Page 16]
  899.